package controle;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import DAO.DAOFactory;
import DAO.ClienteDAO;
import DAO.FuncionarioDAO;
import modelo.Cliente;
/**
 * 
 * @author Douglas Machado
 */
public class ControleCliente implements Controle<Cliente> {

	/**
	 *Vai salvar os seguintes dados
	 * id_time, id_localizacao, sobrenome, cpf, email, nome, senha, sexo,
	 * nascimento
	 */
	@Override

	public void salvar(Cliente e) throws Exception {

		if (e.getCpf().equals("")) {
			throw new Exception("CPF @ obrigat@rio");
		}
		if (e.getEmail().equals("")) {
			throw new Exception("E-mail @ obrigat@rio");
		}
		if (e.getTime().equals("")) {
			throw new Exception("Time @ obrigat@rio");
		}
		ControleLocalizacao controleLocalizacao = new ControleLocalizacao();
		controleLocalizacao.salvar(e.getLocalizacao());
		e.setLocalizacao(controleLocalizacao.buscar(e.getLocalizacao()).get(0));
		
		if (e.getNome().equals("")) {
			throw new Exception("Nome @ obrigat@rio");
		}
		if (e.getSobrenome().equals("")) {
			throw new Exception("Sobrenome @ obrigat@rio");
		}
		
		if (e.getNascimento().equals("")) {
			throw new Exception("Nascimento @ obrigat@rio");
		}

		ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
		if(e.getId()==0){
		clienteDAO.salvar(e);
		JOptionPane.showMessageDialog(null, "Seu Cliente foi salvo com sucesso");

		}else{
			clienteDAO.alterar(e);
			JOptionPane.showMessageDialog(null, "Seu Cliente foi alterado com sucesso");

		}
	}

	/**
	 * Vai excluir o cliente
	 */
	@Override
	public void excluir(Cliente e) {

		ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
		ControleLocalizacao controleLocalizacao = new ControleLocalizacao();
		controleLocalizacao.excluir(e.getLocalizacao());
		clienteDAO.deletar(e);

	}
	/**
	 * Busca e cria uma lista de clientes 
	 * por CPF e email
	 */
	@Override
	public List<Cliente> buscar(Cliente e) throws Exception {
		List<Cliente> clientes = new ArrayList<Cliente>();

		if (e.getCpf() != null && !e.getCpf().equals("")) {
			ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
			clientes = clienteDAO.buscaClientePorCpf(e);
			
		} 
		 else if (e.getEmail().length() != 0) {
				ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
				clientes = clienteDAO.buscaClientePorEmail(e);	
				
		 }
		 else if (e.getNome().length() != 0) {
			ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
			clientes = clienteDAO.buscaClientePorNome(e);
			JOptionPane.showConfirmDialog(null, e.getCpf());
		} else if (e.getId() != 0) {
			ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
			clientes = clienteDAO.buscaClientePorId(e);
			JOptionPane.showConfirmDialog(null, e.getCpf());
		} else {

			throw new Exception("Dados sao obrigat@rio");
		}
		return clientes;
	}

	/**
	 * Vai buscar e criar uma lista de todos clientes
	 */
	@Override
	public List<Cliente> buscarTodos() {
		List<Cliente> clientes = new ArrayList<Cliente>();
		ClienteDAO clienteDAO = DAOFactory.getClienteDAO();
		clientes = clienteDAO.findAll();
		return clientes;

	}
}
